gusucode.com > VC++ RingSDK界面库 > VC++ RingSDK界面库/code/libsrc/ringdows/ringstatic.cpp
/********************************************************************** // // // ########## ###### ######### # ###### # // ############# ########### ######### ######### ### // ######## # ### ## ############# ## ## ##### # #### // #### ## ## ### ### ### # # ##### ##### // # ### # # ## ## ## ## ### // ## ###### ## ## #### #### # # ## // ######### ### ## ### ####### ###### ## ## ### // ###### ## ###### ## ## #### # ## #### // ####### ## ###### ## ### ## ## ### ###### // ######### ## ###### ## ###### ### ## ### # ##### // ## ###### ####### ### #### ## ## ####### ######## ## #### // ## #### ### # ### ### ## ########## ###### ## #### // ## ## ## ######### #### # ## // # ### // ## // ### // ## // // // 临风程序界面类库 ringdows.lib //作者:临风 // //版本:0.2 // //声明:本类库可以自由使用而不须对作者作出任何回报,但作者希望能得到 // 你的鼓励和支持。你可以对类库源码作出修改和改进,但希望你能在 // 修改的同时给作者一份同样的副本。 // 本类库不得用于任何商业用途,如确实需要,请与作者联系。 // //e-mail:ringphone@sina.com // //原文件名:ringstatic.cpp // //说明:静态控件控制 // **********************************************************************/ #define MAKE_SELF_LIB #include "ringdows.h" RingStatic::RingStatic() { m_windowType = ITIS_STATIC; m_crHover = 0xFFFFFFFF; m_crNormal = m_crTextColor; m_cursor = NULL; } RingStatic::~RingStatic() { if(m_cursor) DestroyCursor(m_cursor); } void RingStatic::SetHyperlink(COLORREF crNormal/*=0x00FF0000*/,COLORREF crHover/*=0x00FF0000*/) { m_crTextColor = m_crNormal = crNormal; m_crHover = crHover; m_brush = (HBRUSH)GetStockObject(NULL_BRUSH); ReplaceStyle(0,SS_NOTIFY); if(m_cursor == NULL) { ringStr str(RSTR_WINPATH); str += "\\winhlp32.exe"; HMODULE hModule = LoadLibrary(str.string()); if(hModule) { HCURSOR hCursor = LoadCursor(hModule,MAKEINTRESOURCE(106)); if(hCursor) m_cursor = CopyCursor(hCursor); } FreeLibrary(hModule); } } void RingStatic::SetHyperStyle(UINT styNormal/*=0*/,UINT styHover/*=RINGFONT_UNDERLINE*/) { HFONT hf = (HFONT)SendMessage(m_hWnd,WM_GETFONT,0,0); if(hf) { LOGFONT lf; if(GetObject(hf,sizeof(LOGFONT),&lf)) { lf.lfUnderline = (BYTE)(styNormal & RINGFONT_UNDERLINE); lf.lfItalic = (BYTE)(styNormal & RINGFONT_ITALIC); lf.lfStrikeOut = (BYTE)(styNormal & RINGFONT_STRIKEOUT); if((styNormal & RINGFONT_BOLD) == RINGFONT_BOLD) lf.lfWeight = FW_BOLD; m_font.SetFont(&lf); lf.lfUnderline = (BYTE)(styHover & RINGFONT_UNDERLINE); lf.lfItalic = (BYTE)(styHover & RINGFONT_ITALIC); lf.lfStrikeOut = (BYTE)(styHover & RINGFONT_STRIKEOUT); if((styHover & RINGFONT_BOLD) == RINGFONT_BOLD) lf.lfWeight = FW_BOLD; m_fontHover.SetFont(&lf); m_font.SetWindowFont(m_hWnd); if(SendMessage(m_parent->Handle(),WM_LINKLEAVE,(WPARAM)m_hWnd,0) == 0) InvalidateRect(m_hWnd,NULL,TRUE); } } } LRESULT RingStatic::OnBkColor(UINT uMsg,HDC hDC) { switch(uMsg) { case WM_CTLCOLORSTATIC: return SetColors(hDC); } return 0; } LRESULT RingStatic::RingdowProc(HWND hWnd,RINGPARAMS param) { if(m_crHover != 0xFFFFFFFF) //是超链接 { SetMouseTrack(param); switch(param.uMsg) { case WM_MOUSEHOVER: m_crTextColor = m_crHover; if(m_fontHover.GetFont()) m_fontHover.SetWindowFont(m_hWnd); if(SendMessage(m_parent->Handle(),WM_LINKHOVER,(WPARAM)m_hWnd,0) == 0) UpdateWindow();//InvalidateRect(m_hWnd,NULL,TRUE); break; case WM_MOUSELEAVE: m_crTextColor = m_crNormal; if(m_font.GetFont() && m_fontHover.GetFont()) m_font.SetWindowFont(m_hWnd); if(SendMessage(m_parent->Handle(),WM_LINKLEAVE,(WPARAM)m_hWnd,0) == 0) UpdateWindow();//InvalidateRect(m_hWnd,NULL,TRUE); break; case WM_SETCURSOR: if(m_cursor) SetCursor(m_cursor); return TRUE; } } return RingControls::RingdowProc(m_hWnd,param); } BOOL RingStatic::SizeFitText() { RECT rc; HDC hDC = GetDC(m_hWnd); if(m_font.GetFont()) SelectObject(hDC,m_font.GetFont()); GetClientRect(&rc); if(GetText()) DrawText(hDC,m_buf,strlen(m_buf),&rc,DT_CALCRECT); ReleaseDC(m_hWnd,hDC); return SetPos(0,0,rc.right - rc.left,rc.bottom - rc.top,NULL,SWP_NOMOVE); }